package net.sisgac.reportes.service;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import net.sisgac.atencion_cliente.model.SolicitudServicio;
import net.sisgac.atencion_cliente.model.dao.SolicitudServicioDAO;
import net.sisgac.atencion_cliente.model.dao.jpa.JPASolicitudServicioDAO;
import net.sisgac.cliente.model.dao.jpa.JPAClienteDAO;
import net.sisgac.reportes.model.Reporte;
import net.sisgac.reportes.model.dao.ReporteDAO;
import net.sisgac.reportes.model.dao.jpa.JPAReporteDAO;

public class ReportesServiceImpl implements ReportesService{
	private final String UNIDAD_DE_PERSISTENCIA ="jpaPersistence";
	private EntityManagerFactory fabrica;
	private SolicitudServicioDAO solicitudDAO;
	private ReporteDAO reporteDAO;
	private EntityManager em;
	
	public ReportesServiceImpl(){
		 em =	this.getEntityManager();
		reporteDAO=new JPAReporteDAO(em);
		solicitudDAO=new JPASolicitudServicioDAO(em);
	}
	
	public EntityManager getEntityManager(){

		if(fabrica==null)
			fabrica = Persistence.createEntityManagerFactory(UNIDAD_DE_PERSISTENCIA);
		
		return fabrica.createEntityManager();
		
	}
	
	@Override
	public void generarReporte(Reporte o) {
		// TODO Auto-generated method stub
		EntityTransaction  tx= em.getTransaction();
		try{
			tx.begin();
			int pendientes=o.getPendientes();
			int saldo=o.getSaldo();
			int importeCancelado=o.getImportecancelado();
			String condicionCliente=o.getCondicioncliente();
			
			
			
			o.setPendientes(pendientes);
			o.setSaldo(saldo);
			o.setImportecancelado(importeCancelado);
			o.setCondicioncliente(condicionCliente);
			
			reporteDAO.insert(o);
			tx.commit();
		}catch (Exception ex) {
			// TODO: handle exception
			tx.rollback();
			throw new RuntimeException(ex);
		}
		
		
		
	}

	@Override
	public List<SolicitudServicio> buscarSolitudFecha(Date fecha) {
		// TODO Auto-generated method stub
		List<SolicitudServicio> solicitud=reporteDAO.findByDate(fecha);

		if(solicitud==null){
			throw new RuntimeException("No existe registros en esta Fecha");
		}return solicitud;
	}

	@Override
	public List<SolicitudServicio> listarSolicitud() {
		// TODO Auto-generated method stub
		return solicitudDAO.findAll();
	}

}
